﻿using System;
using System.Net.Sockets;

namespace Klijent
{
    class Ulaz
    {
        static void Main(string[] args)
        {
            Komunikacija kom = new Komunikacija("Navigacija");
            string odgovor;

            for (int i = 0; i < 50; i++)
            {
                odgovor = kom.posaljiVarijable("var" + i.ToString() + ":45" + i.ToString() + ";");
                Console.WriteLine(odgovor);
            }

            odgovor = kom.zatraziVarijable("var18;");
            Console.WriteLine(odgovor);

            odgovor = kom.zavrsiSaKomunikacijom();
            Console.WriteLine(odgovor);
            Console.ReadKey();
        }
       
    }
    class Komunikacija {
        public string imeModula { get; set; }
        public NetworkStream n { get; set; }
        public TcpClient client { get; set; }

        public Komunikacija(string ImeModula)
        {
            TcpClient clientSocket = new TcpClient();
            client = clientSocket;
            Console.WriteLine("Klijent pokrenut");
            try
            {
                client.Connect("127.0.0.1", 5001);
                n = client.GetStream();
            }
            catch
            {
                Console.WriteLine("Server nije pokrenut");
                Console.ReadKey();
                return;
            }
            Console.WriteLine("klijent spojen");
            
            
            imeModula = ImeModula;
        }

        public string zatraziVarijable(string varijable)
        {
            string podaci;
            byte[] outStream = new byte[10025];
            byte[] inStream = new byte[10025];
            podaci = imeModula + ";GET;" + varijable + "$";
            outStream = System.Text.Encoding.ASCII.GetBytes(podaci);
            try
            {
                n.Write(outStream, 0, outStream.Length);
                n.Flush();
            }
            catch
            {
                Console.WriteLine("Nije uspjelo slanje");
            }
            try
            {
                n.Read(inStream, 0, 10025);
            }
            catch
            {
                Console.WriteLine("Nije uspjelo čitanje");
            }
            string odgovor = System.Text.Encoding.ASCII.GetString(inStream);
            odgovor = odgovor.Substring(0, odgovor.IndexOf("$"));
            return odgovor;
        }

        public string posaljiVarijable(string varijable)
        {
            string podaci;
            byte[] outStream = new byte[10025];
            byte[] inStream = new byte[10025];
            podaci = imeModula + ";SET;" + varijable + "$";
            outStream = System.Text.Encoding.ASCII.GetBytes(podaci);
            try
            {
                n.Write(outStream, 0, outStream.Length);
                n.Flush();
            }
            catch
            {
                Console.WriteLine("Nije uspjelo slanje");
            }
            try
            {
                n.Read(inStream, 0, 10025);
            }
            catch
            {
                Console.WriteLine("Nije uspjelo čitanje");
            }
            string odgovor = System.Text.Encoding.ASCII.GetString(inStream);
            odgovor = odgovor.Substring(0, odgovor.IndexOf("$"));
            return odgovor;
        }
        
        public string zavrsiSaKomunikacijom()
        {
            string podaci;
            byte[] outStream = new byte[10025];
            byte[] inStream = new byte[10025];
            podaci = imeModula + ";LOGOUT;$";
            outStream = System.Text.Encoding.ASCII.GetBytes(podaci);
            try
            {
                n.Write(outStream, 0, outStream.Length);
                n.Flush();
            }
            catch
            {
                Console.WriteLine("Nije uspjelo slanje");
            }
            try
            {
                n.Read(inStream, 0, 10025);
            }
            catch
            {
                Console.WriteLine("Nije uspjelo čitanje");
            }
            string odgovor = System.Text.Encoding.ASCII.GetString(inStream);
            odgovor = odgovor.Substring(0, odgovor.IndexOf("$"));
            if (odgovor == "Kraj")
            {
                client.Close();
            }
            return odgovor;
        }
    }
}